﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>	
#include<ctype.h>

//int main() {
//    for (int i = 10000; i <= 100000; i++)
//    {
//        int j = i;
//        int c = 1;
//        while (j)
//        {
//            c*=10;
//            j /= 10;
//        }
//        int sum = 0;
//        while (c)
//        {
//            j = i;
//            sum += (j % c) * (j / c);
//            c /= 10;
//        }
//        if (sum == i)
//        {
//            printf("%d ", i);
//        }
//    }
//
//    return 0;
//}

int my_atoi(const char* s1)
{
	assert(s1);
	if (s1 == '\0')//判断是不是空字符串
	{
		return 0;
	}
	int j = 0;
	while (isspace(*s1))//isspace 库函数 判断字符是不是空格
	{
		s1++;
	}
	int a = 1;
	if (*s1 == '+')//如果为正数
	{
		a = 1;
		s1++;
	}
	if (*s1 == '-')//如果为负数
	{
		a = -1;
		s1++;
	}
	int sum = 0;
	while (*s1 != '\0')
	{
		if (isdigit(*s1))//isdigit 库函数 判断字符是不是为十进制 字符  
		{
			sum = 10 * sum + (*s1) - '0';//十进制 字符-‘0’ = 对应的数字
		}
		else//除了十进制字符 其他字符都终止循环
		{
			break;
		}
		s1++;
	}
	return sum*a;
}

int main()
{
	char arr[256]="123456.67";
	int i = 0; 
	i = my_atoi(arr);//将字符串中的 数字 打印为整数
	printf("%d ", i);
	return 0;
}

//int main()// 难
//{
//	int n = 9;
//	float* pFloat = (float*)&n;
//	printf("n的值为：%d\n", n);//9
//	printf("*pFloat的值为：%f\n", *pFloat);//0
//	*pFloat = 9.0;
//	//任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式：
//	//V= (−1)^S M ∗ 2^E
//	// （−1)^S 表⽰符号位，当S=0，V为正数；当S=1，V为负数
//	// M 表⽰有效数字，M是⼤于等于1，⼩于2的
//	// 2^E 表⽰指数位
//	//1001 - 9的二进制位
//	// 因为是正整数 所以 S =0;
//	//1.001 -M  1<=M<2
//	//1.001* 2^3 =9 所以 E = 3；
//	//第⼀位的符号位S=0，有效数字M等于001后⾯再加20个0，凑满23位，指数E等于3+127=130，即10000010
//	//写成⼆进制形式，应该是S+E+M，即 0 10000010 001 0000 0000 0000 0000 0000
//	printf("num的值为：%d\n", n);//1091567616
//	printf("*pFloat的值为：%f\n", *pFloat);//9
//	return 0;
//}


//int main()
//{
//	unsigned int i;
//	for (i = 9; i >= 0; i--)
//	{
//		printf("%u\n", i);
//	}
//	return 0;
//}

//unsigned char i = 0;
//int main()
//{
//	for (i = 0; i <= 255; i++)
//	{
//		printf("hello world\n");
//	}
//	return 0;
//}

//int main()
//{
//	char a[1000];
//	int i;
//	for (i = 0; i < 1000; i++)
//	{
//		
//		a[i] = -1 - i;// 当 arr[i]=128时在 减1 就会变成127 当遇到'\0'的时候 停止计算长度 
//	}                //'\0' 的ASCII 是0
//	printf("%d", strlen(a));
//	return 0;
//}


//int main()
//{
//	char a = 128;
//	//10000000000000000000000010000000
//	//11111111111111111111111101111111
//	//11111111111111111111111010000000
//
//	//00000000000000000000000010000000
//	//00000000000000000000000010000000
//	//00000000000000000000000010000000
//
//	
//	signed char b = -1;
//	unsigned char c = -1;
//	printf("%u", a);//无符号整形
//	return 0;
//}

//int main()
//{
//	//char arr[] = "hello world";
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr1[] = { 1,3,4,5,6,7,8 };
//	//memset - 内存中修改
//	// 以字节为单位的
//	//memset(arr + 6, 'b', 3);// arr+6起始位置 'b'是要修改成为的字符 3是改多少个
//	memset(arr + 6, 1, 3);//不能修改 整形中对应元素 
//	memcmp(arr, arr1, 5);
//	//memcmp 是对比2个数组 按一个一个字节的 
//	//printf("%s", arr);
//	return 0;
//}

//void * my_memcpy(void* dest, const void* src, unsigned emo)
//{
//	void* ret = dest;
//	assert(dest && src);
//	while (emo--)
//	{
//		//拷贝一个字节
//		*(char*)dest = *(char*)src;
//		dest = (char*)dest + 1;
//		src = (char*)src + 1;
//	}
//	return ret;
//}
//
//	void* my_memmove(void* dest, const void* src, size_t sz) 
//	{
//		assert(dest && src);
//		void* res = dest;
//		// 如果 dest 首元素位置在src 前面 就从前向后拷
//		// 如果 dest 首元素位置在src 后面并且在src末元素之前 就从后向前拷
//		// 如果 dest 与src 无交集 那么 前后无所谓
//		if (dest<src)
//		{
//			while (sz--)
//			{
//				*(char*)dest = *(char*)src;
//				dest = (char*)dest + 1;
//				src = (char*)src + 1;
//			}
//		}
//		else
//		{
//			while (sz--)
//			{
//				*((char*)dest + sz) = *((char*)src + sz);
//			}
//		}
//		return res;
//	}
//	int main()
//	{
//		int arr[10] = { 0 };
//		int arr2[] = { 1,2,3,4,5,6,7,8,9,10};
////	//memcpy - 内存拷贝
////	//返回的是目标空间的起始地址	
////	//可以拷贝内存中 不重叠的拷贝
////	//memmove - 内存拷贝
////	//可以拷贝内存中 重叠的拷贝
////	//my_memcpy(arr, arr2, 20);
//	my_memmove(arr2 + 2, arr2, 10);// 1 2 3 4 5 6 7 8  9 10 //3 4 5 6 7 1 2 3 4 5
//	int i = 0;
//	for (i = 0; i <10; i++)
//	{
//		printf("%d ", arr2[i]);
//	}
//}
